package JDBC.jdbc;

import JDBC.util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCDemo5 {
    public static void main(String[] args) {
        /*
        事务：一个包含多个步骤的业务操作，如果这个业务操作被事务管理，
        则这个多步骤的要么同时成功，要么同时失败


        开启事务：
        setAutoCommit(boolean autoCommit): 调用这个方法设置参数为false，即开启事务
        在执行sql前开启事务

        提交事务：
        commit()  当所有sql都执行完提交事务

        回滚事务：
        rollback()   在catch中回滚事务
         */


        Connection connection=null;
        Statement statement=null;
        try {
//         1.获得连接
            connection = JDBCUtil.GetConnection();
//         2.开启事务
            connection.setAutoCommit(false);
            statement=connection.createStatement();
//         3.事件发生
            String sql="update account set money=money+500 where id=?";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1,5);


            String sql1 = "insert into account(id,name,money) values(?,?,?)";
            PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
            preparedStatement1.setInt(1,2);
            preparedStatement1.setString(2,"测试事务");
            preparedStatement1.setInt(3,10000);
//          4.如果没有异常，则提交事务
            connection.commit();
        } catch (SQLException e) {
            try {
//          5.如果有异常回滚事务
                connection.rollback();
            }catch (SQLException e1){
                e1.printStackTrace();
            }
        }finally {
            {
//                释放资源
                JDBCUtil.close(connection,statement,null);
            }
        }
    }
}
